package com.itheima.aspect;

import com.sun.xml.internal.bind.v2.TODO;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

//这只是给大家模拟待会讲的springmvc异常处理器原理, 实际上不能运行
//@Component
//@Aspect
public class ExceptionHandlerAspect {

    //切入点: 指定controller包下所有类的所有方法为切入点
    @Pointcut("execution(* com.itheima.controller.*.*(..))")
    public void pt(){

    }

    //通知
    @Around("pt()")
    public Object around(ProceedingJoinPoint pjp){

        Object result = null;
      /* try {
            //切入点方法的调用
            result = pjp.proceed();
        } catch (Throwable t) {
//                TODO 切入点方法出现异常,这里就会运行
//                1. Throwable是异常最高类
//                    1). Error : 错误
//                    2). Exception : 异常
//                2. 大部分情况下 t 还是exception

            Class<?> c = t.getClass(); //获取异常类型
//            t.printStackTrace(); //打印异常的api
            System.out.println("异常通知:" + c);
        }*/
        try {
            //切入点方法的调用
            result = pjp.proceed();
        }catch (NullPointerException e1){
            //如果切入点发生空指针异常执行此代码
//            method01();
        }catch (ArithmeticException e2){
            //如果切入点发生算术异常执行此代码
//            method02();
        }catch (Throwable t){
            //如果切入点发生除空指针和算术异常之外的其他异常,执行此代码
//            method03();
        }
        return result;
    }
}
